export const arrTotree = () => {

};

/**
* 方法二：非递归实现（映射 + 引用）
* 前提：每一项都有parentId，根元素
* @param {Array} list 数组
* @param {String} rootId 根元素id
* @param {Object} param2 可配置参数
*/
export const generateTree = (
  list,
  rootId,
  { idName = 'target', parentIdName = 'source', childName = 'children' } = {},
) => {
  if (!Array.isArray(list)) {
    return list;
  }
  const objMap = {}; // 暂存数组以id为key的映射关系
  const result = []; // 结果

  list.forEach((item) => {
    const id = item[idName];
    const parentId = item[parentIdName];
    objMap[id] = !objMap[id] ? item : { ...item, ...objMap[id] };
    const treeItem = objMap[id]; // 找到映射关系那一项（注意这里是引用）
    if (parentId === rootId) {
      // 已经到根元素则将映射结果放进结果集
      result.push(treeItem);
    } else {
      // 若父元素不存在，初始化父元素
      if (!objMap[parentId]) {
        objMap[parentId] = {};
      }

      // 若无该根元素则放入map中
      if (!objMap[parentId][childName]) {
        objMap[parentId][childName] = [];
      }
      objMap[parentId][childName].push(treeItem);
    }
  });
  return result;
};
